package ProyectoX;

import java.awt.BorderLayout;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;
import javax.swing.border.BevelBorder;

import TDAPriorityQueue.*;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Logica extends javax.swing.JFrame {
	
	protected Nivel MiNivel;
	protected JPanel jPanelNivel;
	protected NaveJugador MiNave;
	protected JLabel jLabelPuntaje;
	private JLabel Pausa;
	private JLabel Reset;
	private JLabel LabelExit;
	protected JLabel jLabelBombas;
	protected JLabel LabelElegir;
	protected JLabel jLabelCofre;
	protected JLabel jLabelGanaste;
	protected JLabel jLabelPerdi;
	protected JLabel jLabelCorazon;
	protected JLabel jLabelPuntos;
	protected JPanel PanelPuntos;
	protected JLabel Fondo;
	private JToolBar jToolBarTop;
	protected MenteTeclado menteTeclado;
	protected JPanel contentPane;
	private ImagePanel PanelInicio;
	private JButton BotonActualizar;
	private JTextField CajaNombre;
	private JTextArea area;
	private JTextArea LabelBuceadora;
	private JTextArea LabelBuceador;
	private JTextArea LabelSubmarino;
	private JPanel PanelInstrucciones;
	protected JButton BotonComenzar;
	private JButton BotonContinuar;
	private JPanel PanelNombre;
	private JButton BotonContinuar2;
	private JPanel PanelJugador;
	private JButton BotonSubmarino;
	private JButton BotonBuceador;
	private JButton BotonBuceadora;
	private JPanel PanelRanking;
	private String nombreJugador;
	protected Fondo fondo;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SplashScreen splash = new SplashScreen(4000);
		splash.showSplash();
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Logica inst = new Logica();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	public Logica() {
		super();
		
		this.setTitle("Water War");
		this.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Antiparras.png")).getImage());
		
		
		MiNivel = new Nivel();

		this.setLocationByPlatform(true);		
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		getContentPane().setBackground(new java.awt.Color(173,216,230));
		this.setResizable(false);
		
		contentPane = new JPanel();
		contentPane.setBorder(null);
		setContentPane(contentPane);
		contentPane.setLayout(null);
		contentPane.setBounds(0,0, 850, 550 );
		
		
		initGUI2();
		this.setSize(850,550);
		
	}
	
private void initGUI2(){
		
		
		ImageIcon img2=new ImageIcon(getClass().getClassLoader().getResource("Imagenes/PrimerPanel.jpg"));
		PanelInicio = new ImagePanel(img2.getImage());
		
		PanelInicio.setBackground(java.awt.Color.BLACK);
		PanelInicio.setSize(850, 550);
		contentPane.add(PanelInicio);
		PanelInicio.setLayout(null);
		
		{
			BotonComenzar = new JButton();
			PanelInicio.add(BotonComenzar);
			BotonComenzar.setBounds(315, 285, 200, 200);
			BotonComenzar.setBackground(new java.awt.Color(192,192,192));
			BotonComenzar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/BotonJugar.png")));
			BotonComenzar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
			BotonComenzar.setOpaque(false);
			BotonComenzar.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent evt) {
					BotonComenzarMouseClicked(evt);
				}
			});
		}
	}
	
	private void initInstrucciones(){
		
		PanelInicio.setVisible(false);

		ImageIcon img=new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Controles.jpg"));
		PanelInstrucciones = new ImagePanel(img.getImage());
		PanelInstrucciones.setBackground(java.awt.Color.BLACK);
		PanelInstrucciones.setSize(850, 550);
		PanelInstrucciones.setLayout(null);
		PanelInstrucciones.setPreferredSize(new java.awt.Dimension(648, 396));
		PanelInstrucciones.setVisible(true);

		
		contentPane.add(PanelInstrucciones, BorderLayout.CENTER);
		{
			BotonContinuar = new JButton();
			PanelInstrucciones.add(BotonContinuar);
			BotonContinuar.setBounds(653, 394, 120, 90);
			BotonContinuar.setFont(new java.awt.Font("Tahoma",1,18));
			BotonContinuar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Next.png")));
			BotonContinuar.setOpaque(false);
			BotonContinuar.setBackground(new java.awt.Color(79,255,167));
			BotonContinuar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
			BotonContinuar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					BotonContinuarActionPerformed(evt);
				}
			});
		}
	}
	
	private void initElegirJugador(){
		
		PanelNombre.setVisible(false);
		
		ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Seleccionar.jpg"));
		PanelJugador = new ImagePanel(img.getImage());
		PanelJugador.setBackground(new java.awt.Color(126,245,194));
		PanelJugador.setSize(850, 550);
		contentPane.add(PanelJugador, BorderLayout.CENTER);
		PanelJugador.setLayout(null);
		PanelJugador.setForeground(new java.awt.Color(128,0,255));
		PanelJugador.setPreferredSize(new java.awt.Dimension(850, 550));
		
		{
			BotonSubmarino = new JButton();
			PanelJugador.add(BotonSubmarino);
			BotonSubmarino.setBounds(82, 113, 165, 207);
			BotonSubmarino.setFont(new java.awt.Font("Tahoma",1,18));
			BotonSubmarino.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Submarino.png")));
			BotonSubmarino.setBackground(new java.awt.Color(255,255,255));
			BotonSubmarino.setBorder(BorderFactory.createEtchedBorder(new java.awt.Color(128,0,255), new java.awt.Color(128,0,255)));
			BotonSubmarino.setForeground(new java.awt.Color(128,0,255));
			BotonSubmarino.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					BotonSubmarinoActionPerformed(evt);
				}
			});

		}
		
		{
			BotonBuceador = new JButton();
			PanelJugador.add(BotonBuceador);
			BotonBuceador.setText("");
			BotonBuceador.setBounds(340, 113, 168, 207);
			BotonBuceador.setFont(new java.awt.Font("Tahoma",1,18));
			BotonBuceador.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/BuzoParado.png")));
			BotonBuceador.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED, new java.awt.Color(0,255,255), new java.awt.Color(0,255,255)));
			BotonBuceador.setBackground(new java.awt.Color(255,255,255));
			BotonBuceador.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					BotonBuceadorActionPerformed(evt);
				}
			});

		}
		
		{
			BotonBuceadora = new JButton();
			PanelJugador.add(BotonBuceadora);
			BotonBuceadora.setText("");
			BotonBuceadora.setBounds(596, 113, 168, 207);
			BotonBuceadora.setFont(new java.awt.Font("Tahoma",1,18));
			BotonBuceadora.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/BuceadoraParada.png")));
			BotonBuceadora.setBorder(BorderFactory.createEtchedBorder(BevelBorder.RAISED, new java.awt.Color(255,0,255), new java.awt.Color(255,0,255)));
			BotonBuceadora.setBackground(new java.awt.Color(255,255,255));
			BotonBuceadora.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					BotonBuceadoraActionPerformed(evt);
				}
			});

		}
		
		{
			LabelSubmarino = new JTextArea();
			PanelJugador.add(LabelSubmarino);
			LabelSubmarino.setBounds(82, 354, 165, 140);
			LabelSubmarino.setText("  - Velocidad.............55%\r\n\r\n  - Ataque.................98%\r\n\r\n  - Resistencia..........65% \r\n\r\n");
			LabelSubmarino.setOpaque(false);
			LabelSubmarino.setFont(new java.awt.Font("Segoe UI",0,14));
			
		}
		{
			LabelBuceador = new JTextArea();
			PanelJugador.add(LabelBuceador);
			LabelBuceador.setText("  - Velocidad.............90%\r\n\r\n  - Ataque.................60%\r\n\r\n  - Resistencia..........80% \r\n\r\n");
			LabelBuceador.setOpaque(false);
			LabelBuceador.setBounds(340, 354, 168, 134);
			LabelBuceador.setFont(new java.awt.Font("Segoe UI",0,14));
		}
		{
			LabelBuceadora = new JTextArea();
			PanelJugador.add(LabelBuceadora);
			LabelBuceadora.setText("  - Velocidad.............82%\r\n\r\n  - Ataque.................80%\r\n\r\n  - Resistencia..........80% \r\n\r\n");
			LabelBuceadora.setOpaque(false);
			LabelBuceadora.setBounds(596, 354, 168, 120);
			LabelBuceadora.setFont(new java.awt.Font("Segoe UI",0,14));
		}

	}
	
	public void initRanking(){
		
		if(MiNave.vive())
			jLabelGanaste.setVisible(true);
		else
			jLabelPerdi.setVisible(true);
		
	
		area = new JTextArea();
		
		fondo.Visible();
		jPanelNivel.setVisible(false);
		contentPane.remove(jPanelNivel);
		
		String todo = "" ;
	
		ImageIcon img3 = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/panelRanking.jpg"));
		PanelRanking =  new ImagePanel(img3.getImage());
		contentPane.add(PanelRanking, BorderLayout.CENTER);
		PanelRanking.setLayout(null);
		
		PanelRanking.setBackground(new java.awt.Color(255,255,255));
		PanelRanking.setSize(850, 550);
		
		PanelRanking.setBounds(0,0,this.getWidth(),this.getHeight());
		PanelRanking.setForeground(new java.awt.Color(128,0,255));
		PanelRanking.setPreferredSize(new java.awt.Dimension(843, 549));
		PanelRanking.setVisible(true);
		
		
		  File archivo = null;
		  FileReader fr = null;
		  BufferedReader br = null;
		  
		  FileWriter fw = null;
		  PrintWriter pr = null;
		  
	      
	      try {
	         // Apertura del fichero y creacion de BufferedReader para poder
	         // hacer una lectura comoda (disponer del metodo readLine()).
	  
	    	 
	         archivo = new File ("src/Archivos","archivo.txt");
	         
	         fr = new FileReader (archivo);
	         br = new BufferedReader (fr);
	        
	         // Lectura del fichero
	         
	         PriorityQueue<Integer,String> cola = new HeapPriorityQueue<Integer,String>();
	         
	         String linea;
	         
	         int puntajeJugador =  MiNave.obtenerPuntaje();
	         int aux = 0; 
	         
	         while((linea = br.readLine()) != null ){
	        	
	        	int i = 0;
	        	
	        	while(linea.charAt(i) != '*'){
	        		i++;
	        	}
	        	
	        	String nombre = linea.substring(0, i);
	        	i++;
	        	String StrPuntaje = linea.substring(i,linea.length());
	        	aux = Integer.parseInt(StrPuntaje);
	        	
	        	cola.insert(aux,nombre);
	        	
	         }
	         
	         cola.insert(puntajeJugador,nombreJugador);
	         
	         fr.close();
	         
	         fw = new FileWriter(archivo);
	         pr = new PrintWriter(fw);	         
	         int i = 0;
	         
	         while(!cola.isEmpty() && i<5){
	        	 
	        	 Entry <Integer,String> ent = cola.removeMin();
	        	 String  str = ent.getValue() + "*"+ ent.getKey();
	        	 pr.write(str);
	        	 pr.write("\r\n");
	        	 todo += (i+1) +" . "+ ent.getValue() + "..............."+ent.getKey() + "\r\n";
	        	 
	        	 i++;
	         }
	         
	         fw.close();
	         pr.close();
	         
	      }
	      
	      catch(Exception e){
	    	  
	         e.printStackTrace();
	      }
	
	      area.setText(todo);
	      area.setVisible(true);
	      PanelRanking.add(area);
	      area.setForeground(new java.awt.Color(255,128,0));
	      area.setFont(new java.awt.Font("Tahoma",0,36));
	      area.setBounds(145, 138, 501, 233);
	      area.setEnabled(false);
	      area.setOpaque(false);
	      {
	    	  BotonActualizar = new JButton();
	    	  PanelRanking.add(BotonActualizar);
	    	  BotonActualizar.setText("");
	    	  BotonActualizar.setBounds(753, 12, 83, 62);
	    	  BotonActualizar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/BotonReset.png")));
	    	  BotonActualizar.addActionListener(new ActionListener() {
	    		  public void actionPerformed(ActionEvent evt) {
	    			  BotonActualizarActionPerformed(evt);
	    		  }
	    	  });

	      }
	      
	}


	private void initGame() {	
		
		this.requestFocus();
		
		menteTeclado = new MenteTeclado(MiNave, this);
		this.addKeyListener(menteTeclado);
		MiNivel.setJuego(this);
		MiNivel.elegirNavePcipal(MiNave);
		MiNivel.Juego();
		
		
			
	}

	
	private void initGUI() {
		try {
			
			PanelJugador.setVisible(false);			
			
			MiNave.setBounds(0, 0,MiNave.getIcon().getIconWidth(), MiNave.getIcon().getIconHeight());
			contentPane.add(MiNave);
			
			{
				jPanelNivel = new JPanel();
				contentPane.add(jPanelNivel);
				jPanelNivel.setLayout(null);
				jPanelNivel.setOpaque(false);
				jPanelNivel.setBackground(new java.awt.Color(131,186,204));
				jPanelNivel.setVisible(true);
				jPanelNivel.setBounds(0,0, 850, 550 );
				
				PanelPuntos = new JPanel();
				jPanelNivel.add(PanelPuntos);
				PanelPuntos.setBounds(-1, 0, 845, 38);
				PanelPuntos.setLayout(null);
				PanelPuntos.setBackground(new java.awt.Color(254,220,203));
				
				fondo = new Fondo(MiNivel, contentPane);
				fondo.start();
				{
	
					jToolBarTop = new JToolBar();
					contentPane.add(jToolBarTop, BorderLayout.NORTH);
					jToolBarTop.setFloatable(false);
					jToolBarTop.setBackground(new java.awt.Color(131,186,204));
				}
				{
					{
						jLabelPuntaje = new JLabel();
						PanelPuntos.add(jLabelPuntaje);
						jLabelPuntaje.setText("Score:");
						jLabelPuntaje.setBounds(8, 1, 114, 39);
						jLabelPuntaje.setFont(new java.awt.Font("Segoe UI",1,20));
						jLabelPuntaje.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/monedita.gif")));
						jLabelPuntaje.setForeground(new java.awt.Color(255,0,0));
					}
					{
						jLabelPuntos = new JLabel();
						PanelPuntos.add(jLabelPuntos);
						jLabelPuntos.setText("0000");
						jLabelPuntos.setBounds(99, 1, 55, 39);
						jLabelPuntos.setFont(new java.awt.Font("Segoe UI",1,20));
						jLabelPuntos.setForeground(new java.awt.Color(255,0,0));
						jLabelPuntos.setBackground(new java.awt.Color(255,255,125));
					}
					{
						jLabelCorazon = new JLabel();
						PanelPuntos.add(jLabelCorazon);
						jLabelCorazon.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/CorazonBurbuja5.png")));
						jLabelCorazon.setBounds(370, 0, 230, 38);
					}
					{
						jLabelBombas = new JLabel();
						PanelPuntos.add(jLabelBombas);
						jLabelBombas.setText(""+ MiNivel.cantBombas());
						jLabelBombas.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Bomba.png")));
						jLabelBombas.setBounds(220, 4, 64, 31);
						jLabelBombas.setFont(new java.awt.Font("Segoe UI",1,20));
						jLabelBombas.setForeground(new java.awt.Color(255,0,0));
					}
					{
						LabelExit = new JLabel();
						PanelPuntos.add(LabelExit);
						LabelExit.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Exit.png")));
						LabelExit.setBounds(807, 1, 34, 37);
						
						LabelExit.addMouseListener(new MouseAdapter() {
							public void mouseClicked(MouseEvent evt) {
								jButtonExitMouseClicked(evt);
							}
						});
					}
					{
						Pausa = new JLabel();
						PanelPuntos.add(Pausa);
						Pausa.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Pausa.png")));
						Pausa.setBounds(731, 1, 33, 37);
						Pausa.addMouseListener(new MouseAdapter() {
							public void mouseClicked(MouseEvent evt) {
								PausaMouseClicked(evt);
							}
						});

					}
					{
						Reset = new JLabel();
						PanelPuntos.add(Reset);
						Reset.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Reset.png")));
						Reset.setBounds(770, 3, 32, 32);
						Reset.addMouseListener(new MouseAdapter() {
							public void mouseClicked(MouseEvent evt) {
								ResetMouseClicked(evt);
							}
						});
					}

				}
				{
					jLabelCofre = new JLabel();
					jPanelNivel.add(jLabelCofre);
					jLabelCofre.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/cofre-de-oro.gif")));
					jLabelCofre.setBounds(247, 166, 350, 350);
					jLabelCofre.setVisible(false);
				}
				{
					jLabelGanaste = new JLabel();
					contentPane.add(jLabelGanaste);
					jLabelGanaste.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Ganaste.gif")));
					jLabelGanaste.setBounds(227, 270, 409, 166);
					jLabelGanaste.setVisible(false);
				}
				
				{
					jLabelPerdi = new JLabel();
					contentPane.add(jLabelPerdi);
					jLabelPerdi.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/gameover (2).gif")));
					jLabelPerdi.setBounds(295, 425, 286, 75);
					jLabelPerdi.setVisible(false);
				}
			}
			

			pack();
			this.setSize(850, 550);
			
			initGame();
		
		}
		catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void initNombre(){
		
		PanelInstrucciones.setVisible(false);
		contentPane.remove(PanelInstrucciones);
		
		ImageIcon img2 = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/PanelNombre.jpg"));
		PanelNombre = new ImagePanel(img2.getImage());
		
		contentPane.add(PanelNombre);
		PanelNombre.setLayout(null);

		{
			CajaNombre = new JTextField();
			PanelNombre.add(CajaNombre);
			CajaNombre.setBounds(248, 256, 297, 80);
			CajaNombre.setFont(new java.awt.Font("Segoe UI",2,36));
			CajaNombre.setSize(350, 80);
			CajaNombre.setText("  Ingrese su Nombre ");
			CajaNombre.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent evt) {
					CajaNombreMouseClicked(evt);
				}
			});
		}
		
		{
			BotonContinuar2 = new JButton();
			PanelNombre.add(BotonContinuar2);
			BotonContinuar2.setBounds(653, 394, 120, 90);
			BotonContinuar2.setFont(new java.awt.Font("Tahoma",1,18));
			BotonContinuar2.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Next.png")));
			BotonContinuar2.setBackground(new java.awt.Color(103,224,245));
			BotonContinuar2.setOpaque(false);
			BotonContinuar2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
			BotonContinuar2.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					BotonContinuar2ActionPerformed(evt);
				}
			});
			
		}
		
	}
	
	private void cerrarJuego() {
		this.dispose();
		System.exit(0);
		
	}
	
	public int obtenerAncho(){
		return this.getWidth();
	}
	
	public int obtenerAlto(){
		return this.getHeight();
	}
	
	private void jButtonExitMouseClicked(MouseEvent evt) {
		cerrarJuego();
	}
	
	private void PausaMouseClicked(MouseEvent evt) {
		MiNivel.setPausa();
	}
	
	private void ResetMouseClicked(MouseEvent evt) {
		
	}
	
	private void BotonContinuarActionPerformed(ActionEvent evt) {
		initNombre();
	}
	
	private void BotonContinuar2ActionPerformed(ActionEvent evt) {
		nombreJugador = CajaNombre.getText();
		if(nombreJugador.length()>8)
			nombreJugador = nombreJugador.substring(0,7);
		initElegirJugador();
	}

	private void BotonSubmarinoActionPerformed(ActionEvent evt) {
		
		MiNave = new Submarino(MiNivel);
		initGUI();

	}
	
	private void BotonBuceadorActionPerformed(ActionEvent evt) {
		
		MiNave = new Buceador(MiNivel);
		initGUI();

	}
	
	private void BotonBuceadoraActionPerformed(ActionEvent evt) {
	
		MiNave = new Buceadora(MiNivel);
		initGUI();
	}

	private void BotonComenzarMouseClicked(MouseEvent evt) {
		initInstrucciones();
	}
	
	private void CajaNombreMouseClicked(MouseEvent evt) {
		CajaNombre.setText("");
	}
	
	private void BotonActualizarActionPerformed(ActionEvent evt) {
		Logica inst = new Logica();
		inst.setLocationRelativeTo(null);
		inst.setVisible(true);	}
}


